#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

#define N 3

void RunChild()
{
    int cnt = 15;
    while (cnt)
    {
        printf("I am Child Process, pid: %d, ppid:%d\n", getpid(), getppid());
        sleep(1);
        cnt--;
    }
}

int main()
{
    for (int i = 0; i < N; i++)
    {
        pid_t id = fork();
        if (id == 0)
        {
            RunChild();
            exit(i);
        }
        printf("create child process: %d success\n", id); // 这句话只有父进程才会执行
    }

    // sleep(10);

    // 等待
    for (int i = 0; i < N; i++)
    {
        // wait当任意一个子进程退出的时候，wait回收子进程
        // 如果任意一个子进程都不退出呢？
        // pid_t id = wait(NULL);
        int status = 0;
        pid_t id = waitpid(-1, &status, 0);
        if (id > 0)
        {
            if (WIFEXITED(status))//判断代码是否正常退出
            {
                printf("进程是正常跑完的, 退出码:%d\n", WEXITSTATUS(status));
            }
            else
            {
                printf("进程出异常了,异常信号:%d\n",WTERMSIG(status));
            }
        }
    }
    return 0;

    sleep(5);
}